package geral.manager;

import geral.util.FacesUtil;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import aspecto.annotation.Permissao;
import br.com.sgc.entities.rh.Funcao;
import br.com.sgc.exception.ValidacaoException;
import br.com.sgc.permissao.Role;
import br.com.sgc.session.GenericSession;

@Named
@ConversationScoped
public class FuncaoManager extends GenericManager implements Serializable {

	private static final long serialVersionUID = 1L;

	@EJB private GenericSession<Funcao> funcaoSession;

	private Funcao funcao = new Funcao();

	private List<Funcao> listFuncao = new ArrayList<Funcao>();
	
	@Inject private UtilManager utilManager;

	
	@Permissao(role = Role.Sistema_RH_Funcao_Listar)
	public String list() {
		prepareSave();
		listFuncao = funcaoSession.findAll(Funcao.class, utilManager.getSegurancaManager().getUsuarioLogado().getClinica().getId());
		return "formFuncao";
	}

	@Permissao(role = Role.Sistema_RH_Funcao_Salvar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String prepareSave() {
		funcao = new Funcao();
		funcao.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
		return "formFuncao";
	}

	@Permissao(role = Role.Sistema_RH_Funcao_Salvar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String save() {

		try {
			funcaoSession.save(funcao);
			FacesUtil.mensInfo("Salvo Com Sucesso!");
			return list();
			
		// Erros de negócio
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensWarn(e.getMessage());
		}

		return null;
	}

	@Permissao(role = Role.Sistema_RH_Funcao_Atualizar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String prepareUpdate() {
		funcao = funcaoSession.findById(Funcao.class, funcao.getId());
		funcao.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
		return "formFuncao";
	}

	@Permissao(role = Role.Sistema_RH_Funcao_Atualizar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String update() {

		try {
			funcaoSession.update(funcao);
			FacesUtil.mensInfo("Atualizado Com Sucesso!");
			return list();
			
		// Erros de negócio
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensWarn(e.getMessage());
		}

		return null;
	}

	@Permissao(role = Role.Sistema_RH_Funcao_Excluir)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String delete() {

		try {
			funcaoSession.delete(funcao);
			FacesUtil.mensInfo("Exclu�do Com Sucesso!");
			return list();

		// Erros de negócio
		} catch (ValidacaoException e) {
			FacesUtil.mensInfo("Imposs�vel Excluir!");
		}

		return null;
	}

	public GenericSession<Funcao> getFuncaoSession() {
		return funcaoSession;
	}

	public void setFuncaoSession(GenericSession<Funcao> funcaoSession) {
		this.funcaoSession = funcaoSession;
	}

	public Funcao getFuncao() {
		return funcao;
	}

	public void setFuncao(Funcao funcao) {
		this.funcao = funcao;
	}

	public List<Funcao> getListFuncao() {
		return listFuncao;
	}

	public void setListFuncao(List<Funcao> listFuncao) {
		this.listFuncao = listFuncao;
	}

}
